"""
login: 用于手动登录用户。
LoginRequiredMixin: 用于确保视图只能被已登录用户访问。
CreateView, UpdateView: Django 的通用视图类，分别用于创建和更新对象。
reverse_lazy: 用于延迟解析 URL。
UserRegisterForm, UserUpdateForm: 自定义的表单类，用于用户注册和更新。
"""
from django.contrib.auth import login
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView, UpdateView
from django.urls import reverse_lazy
from .forms import UserRegisterForm, UserUpdateForm

"""
form_class: 指定使用的表单类，这里是 UserRegisterForm。
template_name: 指定使用的模板文件，这里是 users/register.html。
success_url: 指定表单成功提交后的重定向 URL，这里是登录页面。
form_valid 方法: 当表单验证通过时调用。
    super().form_valid(form): 调用父类的 form_valid 方法，处理表单保存等操作。
    login(self.request, self.object): 自动登录新注册的用户。
    return response: 返回父类的响应。
"""
class RegisterView(CreateView):
    form_class = UserRegisterForm
    template_name = 'users/register.html'
    success_url = reverse_lazy('login')

    def form_valid(self, form):
        response = super().form_valid(form)
        login(self.request, self.object)
        return response


"""
LoginRequiredMixin: 确保只有已登录用户才能访问该视图。
form_class: 指定使用的表单类，这里是 UserUpdateForm。
template_name: 指定使用的模板文件，这里是 users/profile.html。
success_url: 指定表单成功提交后的重定向 URL，这里是用户个人资料页面。
get_object 方法: 返回要更新的对象。
    return self.request.user: 返回当前登录的用户对象。
"""
class ProfileView(LoginRequiredMixin, UpdateView):
    form_class = UserUpdateForm
    template_name = 'users/profile.html'
    success_url = reverse_lazy('profile')

    def get_object(self):
        return self.request.user
